#pragma once

#include "map/map.h"

namespace game::system::grid
{
    class GridInfo;
}

class GridState
{
public:

    virtual void Update(Map&, NGridType&, game::system::grid::GridInfo&, const unsigned int& x, const unsigned int& y, const unsigned int& t_diff) const = 0;
    virtual ~GridState();
};

class InvalidState : public GridState
{
public:

    void Update(Map&, NGridType&, game::system::grid::GridInfo&, const unsigned int& x, const unsigned int& y, const unsigned int& t_diff) const override;
};

class ActiveState : public GridState
{
public:

    void Update(Map&, NGridType&, game::system::grid::GridInfo&, const unsigned int& x, const unsigned int& y, const unsigned int& t_diff) const override;
};

class IdleState : public GridState
{
public:

    void Update(Map&, NGridType&, game::system::grid::GridInfo&, const unsigned int& x, const unsigned int& y, const unsigned int& t_diff) const override;
};

class RemovalState : public GridState
{
public:

    void Update(Map&, NGridType&, game::system::grid::GridInfo&, const unsigned int& x, const unsigned int& y, const unsigned int& t_diff) const override;
};